# fanControlLinux

Скрипт, регулирующий скорость вращения вентиляторов на основе температуры процессора и жестких дисков.

Оценивает температуру 4х дисков, определяет самый горячий.

Работает на основе линейной функции, например при температуре 40 градусов нужны обороты 40%, а при температуре 45 градусов уже 65%, 
как понять какие обороты поставить в промежуточной точке 43 градуса?

Нужно по двум координатам графика просчитать коэффициенты **Y=(kx+b)** (**K** и **B**), Y в данном случае обороты, а X - температура, 
т.е., зная коэффициенты графика можно подставить любой X и посчитать Y.

Но график меняет своё ускорение, на малых температурах можно понизить обороты, но вот если слишком жарко на улице и нагрузка на систему большая, 
то температура может приближаться к критичной и в этом случае нужно сильнее прибавлять с каждым градусом.

## Terramaster F4-423 - датчики

```
modprobe coretemp
modprobe drivetemp
modprobe it87 force_id=0x8620
```
Для вашего конкретного устройства добивайтесь, чтобы команда `sensors` выводила все датчики, пример, 
когда детектятся все жесткие диски, процессор и обороты вентилятора.

```
drivetemp-scsi-3-0
Adapter: SCSI adapter
temp1:        +38.0°C  (low  =  +0.0°C, high = +60.0°C)
                       (crit low = -40.0°C, crit = +70.0°C)
                       (lowest = +25.0°C, highest = +41.0°C)

drivetemp-scsi-1-0
Adapter: SCSI adapter
temp1:        +41.0°C  (low  =  +0.0°C, high = +60.0°C)
                       (crit low = -40.0°C, crit = +70.0°C)
                       (lowest = +26.0°C, highest = +43.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +43.0°C  (high = +105.0°C, crit = +105.0°C)
Core 0:        +38.0°C  (high = +105.0°C, crit = +105.0°C)
Core 1:        +38.0°C  (high = +105.0°C, crit = +105.0°C)
Core 2:        +38.0°C  (high = +105.0°C, crit = +105.0°C)
Core 3:        +38.0°C  (high = +105.0°C, crit = +105.0°C)

acpitz-acpi-0
Adapter: ACPI interface
temp1:        +27.8°C

it8620-isa-0a30
Adapter: ISA adapter
in0:           1.88 V  (min =  +0.00 V, max =  +3.06 V)
in1:           1.37 V  (min =  +0.00 V, max =  +3.06 V)
in2:           2.23 V  (min =  +0.00 V, max =  +3.06 V)
+5V:           5.59 V  (min =  +0.00 V, max =  +6.12 V)
in4:           2.27 V  (min =  +0.00 V, max =  +3.06 V)
in5:           2.21 V  (min =  +0.00 V, max =  +3.06 V)
in6:           1.34 V  (min =  +0.00 V, max =  +3.06 V)
3VSB:          5.06 V  (min =  +0.00 V, max =  +6.12 V)
Vbat:          3.36 V
fan2:           0 RPM  (min =    0 RPM)
fan3:        1875 RPM  (min =    0 RPM)
fan4:           0 RPM  (min =    0 RPM)
fan5:           0 RPM  (min =    0 RPM)
temp1:        +34.0°C  (low  = -128.0°C, high = +127.0°C)  sensor = thermal diode
temp2:        +35.0°C  (low  = -128.0°C, high = +127.0°C)  sensor = thermal diode
temp3:        +40.0°C  (low  = -128.0°C, high = +127.0°C)
temp4:        +40.0°C
temp5:        +40.0°C
temp6:        +40.0°C
intrusion0:  ALARM

drivetemp-scsi-2-0
Adapter: SCSI adapter
temp1:        +41.0°C  (low  =  +0.0°C, high = +60.0°C)
                       (crit low = -40.0°C, crit = +70.0°C)
                       (lowest = +26.0°C, highest = +43.0°C)

drivetemp-scsi-0-0
Adapter: SCSI adapter
temp1:        +39.0°C  (low  =  +0.0°C, high = +60.0°C)
                       (crit low = -40.0°C, crit = +70.0°C)
                       (lowest = +26.0°C, highest = +42.0°C)

nvme-pci-0300
Adapter: PCI adapter
Composite:    +37.9°C  (low  = -273.1°C, high = +81.8°C)
                       (crit = +84.8°C)
Sensor 1:     +37.9°C  (low  = -273.1°C, high = +65261.8°C)
Sensor 2:     +34.9°C  (low  = -273.1°C, high = +65261.8°C)
```
## Определение датчиков в sys/class/hwmon

```
for f in $(ls -1 /sys/class/hwmon/); do echo $f" - "$(cat /sys/class/hwmon/${f}/name); done
```
Данная команда выведет следующее

```
hwmon0 - acpitz
hwmon1 - nvme
hwmon2 - coretemp
hwmon3 - drivetemp
hwmon4 - drivetemp
hwmon5 - drivetemp
hwmon6 - drivetemp
hwmon7 - it8620
```
* **hwmon2** - температура процессора
* **hwmon7** - датчики чипсета, там и вентиляторы

